package com.jdk.learn.thread;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * volatile不保证原子性的示例
 */
public class VolatileNoAtomic extends Thread {
//    private  volatile int count=0; //每个线程是单独的count
    private static volatile int count=0;//所有线程共享count
    private static AtomicInteger count2=new AtomicInteger(0);//使用原子类进行操作
    @Override
    public void run() {
        for (int i = 0; i <1000 ; i++) {
            count++;
            //原子操作
            count2.incrementAndGet();//可保证最终结果正确  比如此例子结果是1w
        }
        System.out.println("线程name："+getName()+",count:"+count);
    }

    /**
     * 使用for:形式则解决了部分线程安全问题  但不是绝对线程安全
     * @param args
     */
    public static void main(String[] args) {
        VolatileNoAtomic[] volatileNoAtomic=new VolatileNoAtomic[10];
        for (int i = 0; i < 10; i++) {
            volatileNoAtomic[i]=new VolatileNoAtomic();
        }
        for (VolatileNoAtomic sing:volatileNoAtomic){
            sing.start();
        }

       /* for (int i = 0; i < 10; i++) {
            volatileNoAtomic[i].start();
        }*/
    }
}
